/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model.cliente;

import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import model.dao.IRepositorioCliente;
import model.daoimpl.GenericDAO;
import model.excecoes.ErroDAOException;

/**
 *
 * @author Marcos
 */
public class RepositorioCliente extends GenericDAO<Cliente> implements IRepositorioCliente {

    @Override
    public boolean logarCliente(String login, String senha) throws ErroDAOException, PersistenceException, NoResultException {
        boolean logar = false;

        try {
            Query query = this.getManager().createQuery("Select c.login From Cliente c Where c.login = :login and c.senha = :senha");
            query.setParameter("login", login);
            query.setParameter("senha", senha);

            if(!query.getResultList().isEmpty()){
                logar = true;
            }

        } catch (NoResultException ex) {
            
            throw new ErroDAOException("Erro de Consulta.\nDetalhes Técnicos:\n" + ex.getMessage());
        } catch (PersistenceException ex) {
            throw new ErroDAOException("Erro de Persistência.\nDetalhes Técnicos:\n" + ex.getMessage());
        }

        return logar;
    }

    @Override
    public boolean verificarExistencia(String cpf) throws ErroDAOException, PersistenceException, NoResultException {
        boolean verificar = false;

        try {
            Query query = this.getManager().createQuery("Select c.cpf FROM Cliente c Where c.cpf = :cpf");
            query.setParameter("cpf", cpf);
            if(!query.getResultList().isEmpty()){
                verificar = true;
            }
        } catch (NoResultException ex) {
            throw new ErroDAOException("Erro de Consulta.\nDetalhes Técnicos:\n" + ex.getMessage());
        } catch (PersistenceException ex) {
            throw new ErroDAOException("Erro de Persistência.\nDetalhes Técnicos:\n" + ex.getMessage());
        }

        return verificar;
    }

    

    @Override
    public List<Cliente> listarCliente(String campo, String consulta) throws ErroDAOException, PersistenceException, NoResultException {
        List<Cliente> clientes = null;
        Query query = null;

        try {
            if (consulta.equals("Todos") && campo.equals("Todos")) {
                query = this.getManager().createQuery("Select c From Cliente c");
            } else {
                if (campo.equals("Código")) {
                    query = this.getManager().createQuery("Select c From Cliente c Where c.codigo = :codigo");
                    query.setParameter("codigo", Integer.parseInt(consulta));
                } else {
                    if (campo.equals("Nome")) {
                        query = this.getManager().createQuery("Select c From Cliente c Where c.nome like :nome");
                        query.setParameter("nome", "%" + consulta + "%");
                    } else {
                        if (campo.equals("CPF")) {
                            query = this.getManager().createQuery("Select c From Cliente c Where c.cpf = :cpf");
                            query.setParameter("cpf", consulta);
                        }
                    }
                }
            }
        } catch (NoResultException ex) {
            throw new ErroDAOException("Erro de Consulta.\nDetalhes Técnicos:\n" + ex.getMessage());
        } catch (PersistenceException ex) {
            throw new ErroDAOException("Erro de Persistência.\nDetalhes Técnicos:\n" + ex.getMessage());
        }
        clientes = query.getResultList();
        return clientes;
    }
}
